/******************************************************************************* * Copyright (c) 2007, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.tests.api.workbenchpart; import static org.junit.Assert.assertNotNull; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.workbench.IWorkbench; import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; /** * @since 3.4 * */ public class DependencyInjectionView extends ViewPart { public static final String ID = "org.eclipse.ui.tests.dependencyinjectionview"; List<String> creationCallOrder = new ArrayList<>(); List<String> disposeCallOrder = new ArrayList<>(); boolean fieldAvailable = false; boolean methodParameterAvailable = false; boolean postConstructParameterAvailable = false; boolean predestroyParameterAvailable = false; boolean focusParameterAvailable = false; @Inject Shell shell; @Inject public void method(IWorkbench wb) { // if field is available, DI filled it before calling this method if (shell != null) { creationCallOrder.add("@field"); } creationCallOrder.add("@method"); if (shell != null) { fieldAvailable = true; } // Workbench must be present if (wb != null) { methodParameterAvailable = true; } } public DependencyInjectionView() { creationCallOrder.add("constructor"); } @PostConstruct public void postconstruct(EPartService ps) { creationCallOrder.add("@postconstruct"); // postconstruct is called before createPartControl if (shell == null) { fieldAvailable = false; } if (ps != null) { postConstructParameterAvailable = true; } } @Override public void init(IViewSite site) throws PartInitException { super.init(site); creationCallOrder.add("init"); if (shell == null) { fieldAvailable = false; } } @Override public void createPartControl(Composite parent) { creationCallOrder.add("createPartControl"); // field shell must be injected before createPartControl assertNotNull(shell); } @Focus public void focus(EModelService modelService) { creationCallOrder.add("@focus"); if (modelService != null) { focusParameterAvailable = true; } } @Override public void setInitializationData(IConfigurationElement cfig, String propertyName, Object data) { creationCallOrder.add("setInitializationData"); super.setInitializationData(cfig, propertyName, data); } @Override public void setFocus() { creationCallOrder.add("setFocus"); focusParameterAvailable = true; } @PreDestroy public void predestroy(EModelService modelService) { disposeCallOrder.add("@predestroy"); if (modelService != null) { predestroyParameterAvailable = true; } } @Override public void dispose() { disposeCallOrder.add("dispose"); super.dispose(); } }